<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>观察者模式</h1>
<script>
    // 定义被观察者
    class Subject{
        constructor() {
            this.observers = []
        }
        // 增加观察者
        add(observer){
            this.observers.push(observer)
        }
        // 通知
        notify(){
            this.observers.forEach((item)=>{
                item.update()
            })
        }
        // 删除观察者
        remove(observe){
            this.observers = this.observers.filter((item=>{
                return item != observe
            }))
        }
    }

    // 观察者
    class Observer{
        constructor(name) {
            this.name = name
        }
        // 有人通知我我就触发
        update(){
            console.log(this.name+'爱生活')
        }
    }

    // 实例化
    let subject = new Subject()
    let observe1 = new Observer('小明')
    let observe2 = new Observer('小红')
    subject.add(observe1)
    subject.add(observe2)
    subject.remove(observe1)
    console.log(subject)
</script>

</body>
</html>
